package threading;

// 信号量Semaphore 标准库中

import java.util.concurrent.Semaphore;

public class Demo1 {
    public static void main(String[] args) throws InterruptedException {
        // 构造的时候需要指定初始值：计数器的初始值，表示有多少个可用资源
        Semaphore semaphore = new Semaphore(5);

        // acquire 是P操作，表示申请资源
        // 会抛出异常，需要进行申明
        semaphore.acquire();
        System.out.println("P操作申请资源");
        semaphore.acquire();
        System.out.println("P操作申请资源");
        semaphore.acquire();
        System.out.println("P操作申请资源");
        semaphore.acquire();
        System.out.println("P操作申请资源");
        semaphore.acquire();
        System.out.println("P操作申请资源");
        semaphore.release();
        System.out.println("V操作释放资源");
        semaphore.acquire();
        System.out.println("P操作申请资源");

        // 最后一个P操作无法执行，因为此时的资源个数已达到最大，只会进行阻塞！
        semaphore.acquire();
        System.out.println("P操作申请资源");
    }
}
